Implementación de Pruebas sobre la capa de Persistencia usando UnitilsJUnit4
'Implementación de Pruebas sobre la capa de Persistencia usando UnitilsJUnit4' 'Objetivos:' * Probar la capa de Persistencia, sin necesidad de levantar el servidor. * Inyectar un Entity Manager, sin necesidad de levantar un servidor. * Mostrar como se deben implementar las pruebas de UnitilsJUnit4. 'Descripción:' Cuando desarrolamos una aplicación, la etapa de pruebas siempre se han tenido que realizar con el servidor levantado, la mayoria de veces esto requiere demasiada memoria para tan solo realizar pruebas. Pues bien, con el siguiente manual queremos introducir una nueva manera de hacer pruebas sobre la capa de persistencia, sin necesidad de levantar un servidor que inicialice un Entity Manager que gestione las transacciones con la base de datos. Para esto vamos a inyectar un Entity Manager, a nuestra clase GenericDao, que es de la cual heredan todas las demas clases para realizar la persistencia, y declarando ciertas depencias de UnitilsJUnit4 en nuestro classpath del eclipse, y en el pom. 'Pre-Requisitos:' # Una aplicación que realice persistencia. # Base de datos a la cual se conecte la aplicación (para nuestro caso MICROSOFT SQL SERVER 2008 R2) # Entity Manager con versión inferior a 4.x.x # Dependencias de UnitilsJUnit4 # Eclipse 'Desarrollo:' 'Pruebas de la capa de Persistencia' # Desde Unitils 1.1, se necesita spring 2.0 o superior en su classPath, si desean hacer uso de unitils database, JPA o soporte para hibernate. Esto es porque por debajo, spring se utiliza para transacciones y para la integración con JPA o Hibernate. Esto no significa que se tiene que utilizar spring en el código de la aplicación, se puede mantener spring como dependencia solo para pruebas (test). # Para activar las pruebas en la capa de persistencia, debemos comenzar con la creación de un archivo llamado “''unitils.properties” y que esté disponible en la ruta de clases. El archivo debe contener las propiedades siguientes: # Name or path of the user specific properties file. This file should contain the necessary parameters to connect to the # developer's own unit test schema. It is recommended to override the name of this file in the project specific properties # file, to include the name of the project. The system will try to find this file in the classpath, the user home folder # (recommended) or the local filesystem. unitils.configuration.localFileName=unitils-satix-local.properties # Properties for the PropertiesDataSourceFactory database.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver database.url=jdbc:sqlserver://192.168.0.24:1433 # This property specifies the underlying DBMS implementation. Supported values are 'oracle', 'db2', 'mysql' and 'hsqldb'. # The value of this property defines which vendor specific implementations of DbSupport and ConstraintsDisabler are chosen. database.dialect=org.hibernate.dialect.SQLServerDialect jpa.persistenceProvider=hibernate 3. A continuación, cree un archivo con el nombre: “unitils--local.properties” y poner este archivo en el directorio de inicio del usuario local (por ej: /home/miguel/). El archivo debe contener las propiedades siguientes: database.userName=satix database.password=satix database.schemaNames=satixDB De esta manera, todos los desarrolladores en el equipo se conecta a la misma instancia de base de datos. 4. A continuación debemos agregar al classPath de eclipse todas las dependencias necesarias para que las pruebas corran de manera correcta, entre estas se encuentran: “unitils-orm-3.3.jar” kind="var"'' path=''"M2_REPO/org/unitils/unitils-orm/3.3/unitils-orm-3.3.jar"'' sourcepath=''"M2_REPO/org/unitils/unitils-orm/3.3/unitils-orm-3.3-sources.jar"> “unitils-core-3.3.jar” : “unitils-database-3.3.jar” “unitils-dbmaintainer-3.3.jar” : 5. A continuación lo que debemos hacer es crear un setEntityMananger en nuestra clase GenericDao: /** * @param entityManager * the entityManager to set */ public void setEntityManager(final EntityManager entityManager) { this.em = entityManager; } 6. Lo que sigue es un ejemplo de una prueba de base de datos típica: package ec.gob.supertel.satix; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.junit.Assert; import org.junit.Test; import org.unitils.UnitilsJUnit4; import org.unitils.orm.jpa.annotation.JpaEntityManagerFactory; import ec.gob.supertel.satix.dao.impl.UsuarioDaoImpl; @JpaEntityManagerFactory(persistenceUnit = "pusatix-test", configFile = "META-INF/persistence-test.xml") public class SessionFactoryInyectionTest extends UnitilsJUnit4 { @PersistenceContext private EntityManager entityManager; @Test public void deberiaInyectarUnSessionfactory() { UsuarioDaoImpl usuarioDao = new UsuarioDaoImpl(); usuarioDao.setEntityManager(entityManager); usuarioDao.buscar(new String(" ")); Assert.assertTrue(true); } } : 7. Este es el archivo de configuracion: 'persistence-test.xml' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> : 7. El archivo de configuracion es de la siguiente forma: 'persistence-test.xml' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> : '''Biblografía:' * http://www.unitils.org/cookbook.html